home *** CD-ROM | disk | FTP | other *** search
/ All for Cell Phones: Sony Ericsson / Sony-Ericsson 2004.iso / Java / jungle / jungle.jar / MelodyManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-05-16  |  2.6 KB  |  152 lines

  1. import com.siemens.mp.game.Melody;
  2. import com.siemens.mp.game.MelodyComposer;
  3. import java.io.InputStream;
  4. import java.util.Vector;
  5.  
  6. public class MelodyManager {
  7.    static final int[] BPMs = new int[]{25, 28, 31, 35, 40, 45, 50, 56, 63, 70, 80, 90, 100, 112, 125, 140, 160, 180, 200, 225, 250, 285, 320, 355, 400, 450, 500, 565, 635, 715, 800, 900};
  8.    private static int p_byte;
  9.    private static int p_bit;
  10.    private static byte[] data;
  11.    private static int scale;
  12.    private static Vector melodies = new Vector();
  13.    // $FF: renamed from: mc com.siemens.mp.game.MelodyComposer
  14.    private static MelodyComposer field_0 = new MelodyComposer();
  15.  
  16.    private MelodyManager() {
  17.    }
  18.  
  19.    private static boolean loadData(InputStream var0, int var1) {
  20.       try {
  21.          data = new byte[var1];
  22.          return var0.read(data) >= var1;
  23.       } catch (Exception var3) {
  24.          return false;
  25.       }
  26.    }
  27.  
  28.    public static void loadMelody(InputStream var0, int var1) {
  29.       if (loadData(var0, var1)) {
  30.          scale = 0;
  31.          p_byte = 0;
  32.          p_bit = 0;
  33.  
  34.          while(p_byte < data.length) {
  35.             field_0.resetMelody();
  36.  
  37.             int var2;
  38.             while((var2 = readBits(8)) != 0 && var2 != 26) {
  39.                align8();
  40.  
  41.                for(int var3 = 0; var3 < var2; ++var3) {
  42.                   readCommand();
  43.                }
  44.             }
  45.  
  46.             melodies.addElement(field_0.getMelody());
  47.          }
  48.  
  49.       }
  50.    }
  51.  
  52.    public static void playMelody(int var0) {
  53.       try {
  54.          if (Runko.SoundOn) {
  55.             ((Melody)melodies.elementAt(var0)).play();
  56.          }
  57.       } catch (Exception var2) {
  58.       }
  59.  
  60.    }
  61.  
  62.    private static void align8() {
  63.       if (p_bit != 0) {
  64.          p_bit = 0;
  65.          ++p_byte;
  66.       }
  67.  
  68.    }
  69.  
  70.    private static int nextBit() {
  71.       int var0 = data[p_byte] >> 7 - p_bit & 1;
  72.       if (++p_bit > 7) {
  73.          p_bit = 0;
  74.          ++p_byte;
  75.       }
  76.  
  77.       return var0;
  78.    }
  79.  
  80.    private static int readBits(int var0) {
  81.       int var1 = 0;
  82.  
  83.       for(int var2 = 0; var2 < var0; ++var2) {
  84.          var1 = var1 << 1 | nextBit();
  85.       }
  86.  
  87.       return var1;
  88.    }
  89.  
  90.    private static void readCommand() {
  91.       if (readBits(7) == 29 && readBits(3) == 1) {
  92.          int var0 = readBits(4);
  93.  
  94.          for(int var1 = 0; var1 < var0; ++var1) {
  95.             readBits(8);
  96.          }
  97.  
  98.          int var2 = readBits(8);
  99.  
  100.          for(int var3 = 0; var3 < var2; ++var3) {
  101.             int var4 = readBits(3);
  102.             int var5 = readBits(2);
  103.             int var6 = readBits(4);
  104.             if (var6 > 0) {
  105.                try {
  106.                   field_0.appendNote(64, 0);
  107.                } catch (Exception var16) {
  108.                }
  109.             }
  110.  
  111.             int var7 = readBits(8);
  112.             if (var7 != 0) {
  113.                for(int var8 = 0; var8 < var7; ++var8) {
  114.                   int var9 = readBits(3);
  115.                   if (var9 == 1) {
  116.                      int var10 = readBits(4);
  117.                      int var11 = readBits(3);
  118.                      int var12 = readBits(2);
  119.  
  120.                      try {
  121.                         if (var10 == 0) {
  122.                            field_0.appendNote(58, (var12 > 0 ? 7 : 0) + var11);
  123.                         } else {
  124.                            field_0.appendNote(12 * (scale + 1) + (var10 - 1), (var12 > 0 ? 7 : 0) + var11);
  125.                         }
  126.                      } catch (Exception var15) {
  127.                      }
  128.                   } else if (var9 == 2) {
  129.                      scale = readBits(2);
  130.                   } else if (var9 == 3) {
  131.                      readBits(2);
  132.                   } else if (var9 == 4) {
  133.                      field_0.setBPM(BPMs[readBits(5)]);
  134.                   } else if (var9 == 5) {
  135.                      readBits(4);
  136.                   }
  137.                }
  138.             }
  139.  
  140.             if (var6 > 0) {
  141.                try {
  142.                   field_0.appendNote(67, var6);
  143.                } catch (Exception var14) {
  144.                }
  145.             }
  146.          }
  147.       }
  148.  
  149.       align8();
  150.    }
  151. }
  152.